package com.cnebula.common.hadoop.oozie.client;

import java.util.List;

/**
 * oozie4.2 webservices api 接口
 */
public interface IOozieRestService {

	/**
	 * POST /oozie/v1/jobs
	 * 
	 * @param properties  workflow依赖的参数
	 * @param immediate 提交作业后是否立即执行
	 * @return json响应格式 
	 *                                    { 
	 *                                         "HttpStatus":    响应状态, 
	 *                                         "HttpHeader":  响应头, 
	 *                                         "Response":      响应内容 
	 *                                    }
	 */
	public String submitStandardJob(List<Property> properties, boolean immediate);

	/**
	 * POST /oozie/v1/jobs?jobtype=mapreduce
	 * 
	 * @param properties  workflow依赖的参数
	 * @param immediate 提交作业后是否立即执行
	 * @return json响应格式
	 */
	public String submitMapReduceJob(List<Property> properties, boolean immediate);

	/**
	 * POST /oozie/v1/jobs?jobtype=pig
	 * 
	 * @param properties  workflow依赖的参数
	 * @param immediate 提交作业后是否立即执行
	 * @return json响应格式
	 */
	public String submitPigJob(List<Property> properties, boolean immediate);

	/**
	 * POST /oozie/v1/jobs?jobtype=hive
	 * 
	 * @param properties  workflow依赖的参数
	 * @param immediate 提交作业后是否立即执行
	 * @return json响应格式
	 */
	public String submitHiveJob(List<Property> properties, boolean immediate);

	/**
	 * GET /oozie/v1/job/#{jobId}?show=info&timezone=GMT
	 * 
	 * @param jobId
	 */
	public String getJobInformation(String jobId);
	
	/**
	 * POST /oozie/v1/jobs
	 * job处于RUNNING、SUSPENDED状态时，才能被杀死
	 * 
	 * @param properties  workflow依赖的参数
	 * @param immediate 提交作业后是否立即执行
	 * @return json响应格式 
	 *                                    { 
	 *                                         "HttpStatus":    响应状态, 
	 *                                         "HttpHeader":  响应头, 
	 *                                         "Response":      响应内容 
	 *                                    }
	 */
	public String killStandardJob(List<Property> properties, boolean immediate);
}
